package com.oocl.crm.parser.impl;

import com.oocl.crm.parser.CmdParser;
import com.oocl.crm.pojo.Customer;
import com.oocl.crm.repository.CustomerDataProcess;
import com.oocl.crm.repository.impl.CustomerDataProcessImpl;
import com.oocl.crm.util.FormatCmd;
import com.oocl.crm.util.FormatPrinter;

public class CmdParserImpl implements CmdParser {
	
	private CustomerDataProcess cdp;
	
	public CmdParserImpl(){
		cdp=new CustomerDataProcessImpl();
	}
	
	@Override
	public void processAdd(String cmd) {
		String[] array = FormatCmd.cmdCondition(cmd);
		String[][] parameter = new String[array.length][2];
		for(int i=0; i<array.length; i++){
			parameter[i] = FormatCmd.cmdKeyValue(array[i]);
		}
		Customer c = new Customer();
		c.setId((cdp.getCounter()+1)+"");
		for(int i=0; i<array.length; i++){
			if(parameter[i][0].equals("name")){
				c.setName(parameter[i][1]);
			}
		}
		for(int i=0; i<array.length; i++){
			if(parameter[i][0].equals("sex")){
				c.setSex(parameter[i][1]);
			}
		}
		for(int i=0; i<array.length; i++){
			if(parameter[i][0].equals("birthday")){
				c.setBirthday(parameter[i][1]);
			}
		}
		for(int i=0; i<array.length; i++){
			if(parameter[i][0].equals("address")){
				c.setAddress(parameter[i][1]);
			}
		}
		for(int i=0; i<array.length; i++){
			if(parameter[i][0].equals("cell")){
				c.setCell(parameter[i][1]);
			}
		}
		cdp.addCustoemr(c);
	}

	@Override
	public void processUpdate(String cmd) {
		// TODO Auto-generated method stub
		if(cmd!=null){
			String[] array = FormatCmd.cmdCondition(cmd);
			String[][] parameter = new String[array.length-1][2];
			for(int i=1; i<array.length; i++){
				parameter[i-1] = FormatCmd.cmdKeyValue(array[i]);
			}
			Customer c = new Customer();
			c.setId(array[0]);
			for(int i=0; i<array.length-1; i++){
				if(parameter[i][0].equals("name")){
					c.setName(parameter[i][1]);
				}
			}
			for(int i=0; i<array.length-1; i++){
				if(parameter[i][0].equals("sex")){
					c.setSex(parameter[i][1]);
				}
			}
			for(int i=0; i<array.length-1; i++){
				if(parameter[i][0].equals("birthday")){
					c.setBirthday(parameter[i][1]);
				}
			}
			for(int i=0; i<array.length-1; i++){
				if(parameter[i][0].equals("address")){
					c.setAddress(parameter[i][1]);
				}
			}
			for(int i=0; i<array.length-1; i++){
				if(parameter[i][0].equals("cell")){
					c.setCell(parameter[i][1]);
				}
			}
			cdp.updateCustomer(c);
		}
	}

	@Override
	public void processDelete(String cmd) {
		// TODO Auto-generated method stub
		if(cmd!=null){
			String[] con = FormatCmd.cmdCondition(cmd);
			int id = Integer.parseInt(con[0]);
			cdp.deleteCustomer(id);
		}
	}

	@Override
	public Customer[] processSort(String cmd) {
		// TODO Auto-generated method stub
		Customer[] customers;
		if (cmd!=null) {
			String field = FormatCmd.cmdCondition(cmd)[0];
			customers=cdp.sort(field);
			return customers;
		}else{
			return null;
		}
		
	}

	@Override
	public Customer[] find(String cmd) {
		return cdp.find(cmd);
	}

	
	@Override
	public void processHelp(String cmd) {
		// TODO Auto-generated method stub
		if(cmd!=null){
			FormatPrinter.printHelpDoc(cmd, null);
		}
	}

}
